Resource allocation is a term used to describe a plan for how a set of available resources will be utilized. In computing devices, or by a processor such as an application specific integrated circuit (ASIC), it is often necessary to allocate resources (e.g., memory) from a pool of hardware elements (e.g., memory controllers). For example, a network element such as a router may need to allocate portions of memory to temporarily cache incoming packets. During resource allocation, if resources are not allocated evenly from all hardware elements in the pool, a single hardware element can become over-utilized and limit overall system performance.
Additionally, some resources require multiple criteria to be able to define “even” usage. For example, memory usage can be measured in terms of both capacity and bandwidth. The more numerous the criteria and the more difficult each is to measure, the more complex it becomes to design a system that can achieve an even allocation of resources. Accordingly, it would be beneficial to have a simple system to evenly allocate resources from a pool of hardware elements in terms of both capacity and bandwidth.